package verfahren;

import java.awt.Color;
import java.util.Random;

import view.SchedulingSimulatorViewer;

public class MyThread implements Runnable {

	private int gelaufeneZeit = 0;
	private int gewarteteZeit = 0;
	private boolean warten = false;
	private int laufZeit;
	private int ankunftsZeit;
	private int id;
	public Thread t;
	private Color farbe;

	/**
	 * 
	 * @param id	Anzahl der Threads
	 * @param laufZeit	Laufzeiten der Threads [array]
	 */
	public MyThread(int id, int laufZeit, Color farbe) {
		this.farbe = farbe;
		this.id=id;
		this.laufZeit = laufZeit;	
		t = new Thread(this); 
	}

	/**
	 * 
	 * @param id	Anzahl der Threads
	 * @param laufZeit	Laufzeiten der Threads [array]
	 * @param ankunftsZeit 	Ankunftszeit der Threads [array]
	 */
	public MyThread(int id, int laufZeit, int ankunftsZeit, Color farbe) {
		this.farbe = farbe;
		this.id=id;
		this.laufZeit = laufZeit;	
		this.ankunftsZeit = ankunftsZeit;
		t = new Thread(this); 
	}

	@Override
	public void run() {
		while (gelaufeneZeit <= laufZeit) {
			if (!warten) {
				gelaufeneZeit++;
//				System.out.println("gelaufeneZeit");
				wait(1);

			} else {
				gewarteteZeit++;
//				System.out.println("gewarteteZeit");
				wait(1);
			}
		}
	}

	/**
	 * Wartet n*10 sekunden
	 * @param n 1/10 sek
	 */
	public void wait(int n) {
		long t0, t1;
		t0 = System.currentTimeMillis();

		do {
			t1 = System.currentTimeMillis();
		} while ((t1 - t0) < (n * 100));
	}

	public void starten() {
		if (warten)
			warten = false;
	}

	public void warten() {
		if (!warten)
			warten = true;
	}
	
	public boolean isWaiting(){
		return warten;
	}

	public int getGelaufeneZeit() {
		return this.gelaufeneZeit;
	}

	public int getGewarteteZeit() {
		return this.gewarteteZeit;
	}

	public int getlaufZeit() {
		return this.laufZeit;
	}
	
	public Color getColor() {
		return this.farbe;
	}
	
	public int getRestLaufzeit() {
		return this.laufZeit-this.gelaufeneZeit;
	}

	public int getAnkunftsZeit() {
		return this.ankunftsZeit;
	}

	public int getID(){
		return this.id;
	}
}
